机缘巧合下肝了两天写了个MVP架构的电影搜索APP,以演示Android平台上APP开发的良好实践。
知识
涉及到APP架构,设计模式,异步加载,分页加载,懒加载,下拉刷新,上拉加载,侧滑菜单,拖拽排序更多等知识。
国内知名的豆瓣电影API已经停止支持了, 转而选择了国外免费的OMDb接口。在如下网站输入邮箱账号即可获取自己的KEY。
https://www.omdbapi.com/apikey.aspx
需求
设想了大体的需求:提供输入框供用户输入关键字,点击搜索之后,将OMDb上检索得到电影海报进行展示,左滑电影海报支持收藏和取消收藏。右滑可以滑动到收藏的电影界面。
UI
主体上采用了ViewPager和BottomNavigation去展示搜索,收藏,关于三个页面。
搜索页面相对复杂些,选择了内嵌了EditText的ToolBar去展示自动展开和折叠的搜索区域。电影列表则采用内嵌了RecyclerView的SwipeRefreshLayout去展示。
收藏页面采用RecyclerView和TouchHelper提供海报长按上下排序的功能。
架构
整体上采用了MVP架构。Activity和控件对应着View层,Model层承担着数据的请求和更新,Presenter层担当View层和Model层的衔接,通过接口回调。
MVP架构不是没有缺点,接口太多,维护麻烦。比如加一个功能,需要在View层,Presenter层和Modle层各增加调用和回调接口。
如下办法可以适当地减轻这种影响。
一,可以将各个接口按模块分好,集成到一个整体的接口里,各模块实现对应的内部接口即可;
二,部分接口可以定义default实现,避免不需要实现该接口的实现类复写一大堆空的实现;
三,将部分接口实现为抽象的基类,各实现类只要继承自该抽象类复写所需的函数即可;
当然MVVM架构是最优解,后面考虑改造为MVVM架构。
开源框架
开源框架上使用了ButterKnife绑定UI,Retrofit负责网络请求,GSON负责解析数据,glide负责加载网络图片。
效果
搜索界面(搜索框展开)
搜索界面(搜索框折叠)
收藏页面
Todo
有不少功能需要添加和完善。比如输入框内清空按钮功能,增加单元测试覆盖等。
App开源到了Github,欢迎大家star。
https://github.com/ellisonchan/EigaKensaku